package com.harunasan.carrental.mbg;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;

/**
 * mysql 代码生成器
 *
 * @author 梁毅
 */
public class MybatisGenerator {

    /**
     * 全局 指定输出目录
     */
    private static final String outputDir = "D:\\Graduation Projects\\car-rental\\cr-api\\api-serve\\src\\main\\java";
    /**
     * mapper 路径配置信息
     */
    private static final String pathInfo = "D:\\Graduation Projects\\car-rental\\cr-api\\api-serve\\src\\main\\resources\\mapper";

    /**
     * RUN THIS
     *
     * @author 梁毅
     */
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://101.43.19.6:3306/car_rental?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai", "user01", "sj13924417942")
                /*
                 * 全局配置(GlobalConfig)
                 */
                .globalConfig(builder -> builder
                        //覆盖已生成文件	默认值:false
                        //.fileOverride()
                        //禁止打开输出目录	默认值:true
                        .disableOpenDir()
                        //指定输出目录	/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
                        .outputDir(outputDir)
                        //作者名	baomidou 默认值:作者
                        .author("梁毅")
                        //开启 kotlin 模式	默认值:false
                        //.enableKotlin()
                        //开启 swagger 模式	默认值:false
                        .enableSwagger()
                        //时间策略	DateType.ONLY_DATE 默认值: DateType.TIME_PACK
                        .dateType(DateType.TIME_PACK)
                        //注释日期	默认值: yyyy-MM-dd
                        .commentDate(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now())))
                /*
                 * 包配置(PackageConfig)
                 */
                .packageConfig(builder -> builder
                        //父包名	默认值:com.baomidou
                        .parent("com.harunasan.carrental.api")
                        //父包模块名	默认值:无
                        .moduleName("serve")
                        //Entity 包名	默认值:entity
                        .entity("domain.entity")
                        //Service 包名	默认值:service
                        .service("service")
                        //Service Impl 包名	默认值:service.impl
                        .serviceImpl("service.impl")
                        //Mapper 包名	默认值:mapper
                        .mapper("dao")
                        //Mapper XML 包名	默认值:mapper.xml
                        .xml("mapper.xml")
                        //Controller 包名	默认值:controller
                        .controller("controller")
                        //自定义文件包名	输出自定义文件时所用到的包名
                        .other("other")
                        //路径配置信息	Collections.singletonMap(OutputFile.mapperXml, "D://")
                        .pathInfo(Collections.singletonMap(OutputFile.mapperXml, pathInfo)))
                .strategyConfig(builder -> builder
                        // 设置需要生成的表名
                        .addInclude("oms_return_check")
                        //.addTablePrefix("pms_")
                        /*
                         * Controller策略配置
                         */
                        .controllerBuilder()
                        //开启生成@RestController 控制器	默认值:false
                        .enableRestStyle()
                        /*
                         * Entity策略配置
                         */
                        .entityBuilder()
                        //开启 lombok 模型	默认值:false
                        .enableLombok()
                        /*
                         * Service策略配置
                         */
                        .serviceBuilder()
                        /*
                         * Mapper策略配置
                         */
                        .mapperBuilder()
                        //启用 BaseResultMap 生成	默认值:false
                        .enableBaseResultMap()
                )
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                //模板配置(TemplateConfig)
                .templateConfig(builder ->
                        builder
                                .disable(TemplateType.ENTITY)
                                .entity("/templates/entity.java")
                                .service("/templates/service.java")
                                .serviceImpl("/templates/serviceImpl.java")
                                .mapper("/templates/mapper.java")
                                .mapperXml("/templates/mapper.xml")
                                .controller("/templates/controller.java")
                                .build())
                .execute();
    }
}
